#include "ImageGray.h"
#include "ipFFT2D.h"
#include "DiskXFile.h"
#include "CmdLine.h"
#include "xtprobeImageDiskXFile.h"
#include "fft2d_util.h"
#include "tp3.h"


using namespace Torch;

int main(int argc, char **argv)
{
	char *image_filename;	
	bool verbose;
 	bool inverse;
	bool swap;
	bool improve;
	bool filtre1;
	bool filtre2;
	float clean;
	float facteur;

	CmdLine cmd;
  	cmd.setBOption("write log", false);
    	
    	cmd.addText("\nArguments:");
    	
	cmd.addSCmdArg("image filename", &image_filename, "image filename");
    	cmd.addText("\nOptions:");
    	cmd.addBCmdOption("-swap", &swap, true, "swap");
	cmd.addBCmdOption("-improve", &improve, true, "improve");		
        cmd.addBCmdOption("-verbose", &verbose, false, "verbose");
    	cmd.addBCmdOption("-inverse", &inverse, false, "inverse");
	cmd.addRCmdOption("-clean", &clean, 0.0, "reduit le bruit sinus dans l'image");
	cmd.addBCmdOption("-filtre1",&filtre1,false,"applique le filtre 1");
	cmd.addBCmdOption("-filtre2",&filtre2,false,"applique le filtre 2");
	cmd.addRCmdOption("-facteur",&facteur,0.2,"valeur du facteur");
	cmd.read(argc, argv);
	
	fft2dTf *image = new fft2dTf(image_filename);

	//calcul de la transformee de fourrier	
	image->fft();
	
	//on affiche les spectre de fourrier imaginaire et reel
	image->fromTab1D_to_Immage2d(improve,swap,0);
	image->fromTab1D_to_Immage2d(improve,swap,1);
	if(filtre1)
	{
		if(facteur > 0. && facteur < 1.){
			print("Filtre un additif \n");
			image->applayfiltre1(facteur);
			char f2[] = {'_','f','i','l','t','r','e','1','.','p','g','m','\0'};
			image->reverseFft(f2);
			image->fromTab1D_to_Immage2d(improve,swap,4);
		}
	}
	
	if(filtre2)
	{	print("facteur \n");
		if(facteur > 0.0 && facteur < 1.0){
			print("Filtre deux multiplicatif \n");
			image->applayfiltre2(facteur,inverse);
			char f1[] = {'_','f','i','l','t','r','e','2','.','p','g','m','\0'};
			image->reverseFft(f1);
			image->fromTab1D_to_Immage2d(improve,swap,4);
		}
	}
	if(clean)
	{	
		if(clean > 0.0 && clean < 1.0){
		image->removeNoise(clean);
		print("ok\n");
		print("Netoyage de l'image \n");
		char imageclean[] = {'_','c','l','e','a','n','.','p','g','m','\0'};
		image->reverseFft(imageclean);
		}
		

	}
	
	

}
